{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from collections import defaultdict\n",
    "\n",
    "import requests\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def do_request(service, a1=None, a2=None, a3=None, **kwargs):\n",
    "    server = 'http://api.gbif.org/v1'\n",
    "    params = ''\n",
    "    for a in [a1, a2, a3]:\n",
    "        if a is not None:\n",
    "            params += '/' + a\n",
    "    req = requests.get('%s/%s%s' % (server, service, params),\n",
    "                       params=kwargs,\n",
    "                       headers={'Content-Type': 'application/json'})\n",
    "    if not req.ok:\n",
    "        req.raise_for_status()\n",
    "    return req.json()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19154\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'key': 9701974,\n",
       " 'datasetKey': 'd7dddbf4-2cf0-4f39-9b2a-bb099caae36c',\n",
       " 'constituentKey': 'e01b0cbb-a10a-420c-b5f3-a3b20cc266ad',\n",
       " 'parentKey': 9661213,\n",
       " 'parent': 'Mammarenavirus',\n",
       " 'kingdom': 'Viruses',\n",
       " 'family': 'Arenaviridae',\n",
       " 'genus': 'Mammarenavirus',\n",
       " 'species': 'Bear Canyon mammarenavirus',\n",
       " 'kingdomKey': 8,\n",
       " 'familyKey': 6230,\n",
       " 'genusKey': 9661213,\n",
       " 'speciesKey': 9701974,\n",
       " 'scientificName': 'Bear Canyon mammarenavirus',\n",
       " 'authorship': '',\n",
       " 'nameType': 'VIRUS',\n",
       " 'taxonomicStatus': 'ACCEPTED',\n",
       " 'rank': 'SPECIES',\n",
       " 'origin': 'SOURCE',\n",
       " 'numDescendants': 0,\n",
       " 'numOccurrences': 0,\n",
       " 'habitats': [],\n",
       " 'nomenclaturalStatus': [],\n",
       " 'threatStatuses': [],\n",
       " 'descriptions': [],\n",
       " 'vernacularNames': [],\n",
       " 'higherClassificationMap': {'8': 'Viruses',\n",
       "  '6230': 'Arenaviridae',\n",
       "  '9661213': 'Mammarenavirus'},\n",
       " 'synonym': False}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "req = do_request('species', 'search', q='bear')\n",
    "print(req['count'])\n",
    "req['results'][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "389\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'key': 121515844,\n",
       " 'datasetKey': 'c33ce2f2-c3cc-43a5-a380-fe4526d63650',\n",
       " 'nubKey': 9681,\n",
       " 'parentKey': 121513412,\n",
       " 'parent': 'Arctoidea',\n",
       " 'phylum': 'Chordata',\n",
       " 'order': 'Carnivora',\n",
       " 'phylumKey': 121445866,\n",
       " 'classKey': 121453723,\n",
       " 'orderKey': 121507052,\n",
       " 'scientificName': 'Ursidae Gray, 1825',\n",
       " 'canonicalName': 'Ursidae',\n",
       " 'authorship': 'Gray, 1825',\n",
       " 'nameType': 'SCIENTIFIC',\n",
       " 'taxonomicStatus': 'ACCEPTED',\n",
       " 'rank': 'FAMILY',\n",
       " 'origin': 'SOURCE',\n",
       " 'numDescendants': 153,\n",
       " 'numOccurrences': 0,\n",
       " 'extinct': False,\n",
       " 'habitats': [],\n",
       " 'nomenclaturalStatus': [],\n",
       " 'threatStatuses': [],\n",
       " 'descriptions': [],\n",
       " 'vernacularNames': [{'vernacularName': 'bear', 'language': 'eng'}],\n",
       " 'higherClassificationMap': {'121445866': 'Chordata',\n",
       "  '121453723': 'Mammalia',\n",
       "  '121507052': 'Carnivora',\n",
       "  '121513412': 'Arctoidea'},\n",
       " 'synonym': False,\n",
       " 'class': 'Mammalia'}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "req_short = do_request('species', 'search', q='bear', rank='family')\n",
    "print(req_short['count'])\n",
    "bear = req_short['results'][0]\n",
    "bear"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import time\n",
    "def get_all_records(rec_field, service, a1=None, a2=None, a3=None, **kwargs):\n",
    "    records = []\n",
    "    all_done = False\n",
    "    offset = 0\n",
    "    num_iter = 0\n",
    "    while not all_done and num_iter < 100:  # arbitrary\n",
    "        req = do_request(service, a1=a1, a2=a2, a3=a3, offset=offset, **kwargs)\n",
    "        all_done = req['endOfRecords']\n",
    "        if not all_done:\n",
    "            time.sleep(1)\n",
    "        offset += req['limit']\n",
    "        records.extend(req[rec_field])\n",
    "        num_iter += 1\n",
    "    return records"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#XXX\n",
    "def get_leaves(nub):\n",
    "    leaves = []\n",
    "    recs = get_all_records('results', 'species', str(nub), 'children')\n",
    "    if len(recs) == 0:\n",
    "        return None\n",
    "    for rec in recs:\n",
    "        if 'nubKey' not in rec:  # XXX why?\n",
    "            continue\n",
    "        rec_leaves = get_leaves(rec['nubKey'])\n",
    "        if rec_leaves is None:\n",
    "            leaves.append(rec)\n",
    "        else:\n",
    "            leaves.extend(rec_leaves)\n",
    "    return leaves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "records = get_all_records('results', 'species', str(bear['nubKey']), 'children')\n",
    "leaves = get_leaves(bear['nubKey'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Agriarctos Kretzoi, 1942 GENUS \n",
      "Ailurarctos Qiu Zhanxiang & Qi Guoquin, 1989 GENUS \n",
      "Ailuropoda microta Pei, 1962 SPECIES \n",
      "Cynodon helveticus (Rütimeyer, 1862) SPECIES \n",
      "Arctodus pristinus Leidy, 1854 SPECIES \n",
      "Arctodus simus SPECIES giant short-faced bear\n",
      "Harpaleocyon Hürzeler, 1944 GENUS \n",
      "Helarctos malayanus euryspilus Horsfield, 1825 SUBSPECIES \n",
      "Helarctos malayanus malayanus SUBSPECIES \n",
      "Indarctos anthracitis Weithofer, 1888 SPECIES \n",
      "Indarctos arctoides Deperet, 1895 SPECIES \n",
      "Indarctos atticus Weithofer, 1888 SPECIES \n",
      "Indarctos nevadensis Macdonald, 1959 SPECIES \n",
      "Indarctos oregonensis Merriam & al., 1925 SPECIES \n",
      "Indarctos salmontanus Pilgrim, 1913 SPECIES \n",
      "Indarctos vireti Villalta & Crusafont, 1943 SPECIES \n",
      "Indarctos zdanskyi Qiu & Tedford, 2003 SPECIES \n",
      "Melursus ursinus inornatus Pucheran, 1855 SUBSPECIES \n",
      "Melursus ursinus ursinus SUBSPECIES \n",
      "Metarctos Gaudry, 1860 GENUS \n",
      "Phoberocyon huerzeleri Ginsburg, 1955 SPECIES \n",
      "Plionarctos edensis Frick, 1926 SPECIES \n",
      "Plionarctos harroldorum Tedford & Martin, 2001 SPECIES \n",
      "Thalarctos Gray, 1825 GENUS \n",
      "Thaumastocyon Stehlin & Helbing, 1925 GENUS \n",
      "Ursavus brevirhinus Hofmann, 1887 SPECIES \n",
      "Ursavus elmensis Stehlin, 1917 SPECIES \n",
      "Ursavus pawniensis Frick, 1926 SPECIES \n",
      "Ursavus primaevus Gaillard, 1899 SPECIES \n",
      "Ursus abstrusus Bjork, 1970 SPECIES \n",
      "Ursus americanus altifrontalis Elliot, 1903 SUBSPECIES \n",
      "Ursus americanus amblyceps Baird, 1859 SUBSPECIES \n",
      "Ursus americanus americanus SUBSPECIES American black bear\n",
      "Ursus americanus californiensis Miller, 1900 SUBSPECIES \n",
      "Ursus americanus carlottae Osgood, 1901 SUBSPECIES \n",
      "Ursus americanus cinnamomum Audubon & Bachman, 1854 SUBSPECIES \n",
      "Ursus americanus emmonsii Dall, 1895 SUBSPECIES \n",
      "Ursus americanus eremicus Merriam, 1904 SUBSPECIES \n",
      "Ursus americanus floridanus Merriam, 1896 SUBSPECIES \n",
      "Ursus americanus hamiltoni Cameron, 1957 SUBSPECIES \n",
      "Ursus americanus kermodei Hornaday, 1905 SUBSPECIES \n",
      "Ursus americanus luteolus Griffith, 1821 SUBSPECIES Louisiana black bear\n",
      "Ursus americanus machetes Elliot, 1903 SUBSPECIES \n",
      "Ursus americanus perniger J.A.Allen, 1910 SUBSPECIES \n",
      "Ursus americanus pugnax Swarth, 1911 SUBSPECIES \n",
      "Ursus americanus vancouveri Hall, 1928 SUBSPECIES \n",
      "Ursus arctos alascensis Merriam, 1896 SUBSPECIES \n",
      "Ursus arctos arctos SUBSPECIES brown bear\n",
      "Ursus arctos beringianus Middendorff, 1851 SUBSPECIES Siberian brown bear\n",
      "Ursus arctos californicus Merriam, 1896 SUBSPECIES \n",
      "Ursus arctos collaris F.G.Cuvier, 1824 SUBSPECIES \n",
      "Ursus arctos crowtheri Schinz, 1844 SUBSPECIES \n",
      "Ursus arctos dalli Merriam, 1896 SUBSPECIES \n",
      "Ursus arctos gyas Merriam, 1902 SUBSPECIES \n",
      "Ursus arctos horribilis Ord, 1815 SUBSPECIES brown bear\n",
      "Ursus arctos isabellinus Horsfield, 1826 SUBSPECIES \n",
      "Ursus arctos lasiotus Gray, 1867 SUBSPECIES \n",
      "Ursus arctos middendorffi Merriam, 1896 SUBSPECIES Kodiak bear\n",
      "Ursus arctos pruinosus Blyth, 1854 SUBSPECIES brown bear\n",
      "Ursus arctos sitkensis Merriam, 1896 SUBSPECIES \n",
      "Ursus arctos stikeenensis Merriam, 1914 SUBSPECIES \n",
      "Ursus arctos syriacus Hemprich & Ehrenberg, 1828 SUBSPECIES \n",
      "Ursus spelaeus Rosenmüller, 1794 SPECIES cave bear\n"
     ]
    }
   ],
   "source": [
    "#[leaf['nameType'] for leaf in leaves]\n",
    "for rec in leaves:\n",
    "    print(rec['scientificName'], rec['rank'], end=' ')\n",
    "    vernaculars = do_request('species', str(rec['nubKey']), 'vernacularNames', language='en')['results']\n",
    "    for vernacular in vernaculars:\n",
    "        if vernacular['language'] == 'eng':\n",
    "            print(vernacular['vernacularName'], end='')\n",
    "            break\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "basis_of_record = defaultdict(int)\n",
    "country = defaultdict(int)\n",
    "zero_occurrences = 0\n",
    "count_extinct = 0\n",
    "for rec in leaves:\n",
    "    #print(rec['scientificName'], rec['rank'], rec['taxonID'])\n",
    "    occurrences = get_all_records('results', 'occurrence', 'search', taxonKey=rec['nubKey'])\n",
    "    for occurrence in occurrences:\n",
    "        basis_of_record[occurrence['basisOfRecord']] += 1\n",
    "        country[occurrence.get('country', 'NA')] += 1\n",
    "        #there is also publisingCountry\n",
    "    if len(occurrences) > 0:\n",
    "        zero_occurrences += 1\n",
    "    profiles = do_request('species', str(rec['nubKey']), 'speciesProfiles')['results']\n",
    "    for profile in profiles:\n",
    "        if profile.get('extinct', False):\n",
    "            count_extinct += 1\n",
    "            break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'Status for each species')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x648 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "countries, obs_countries = zip(*sorted(country.items(), key=lambda x: x[1]))\n",
    "basis_name, basis_cnt = zip(*sorted(basis_of_record.items(), key=lambda x: x[1]))\n",
    "fig = plt.figure(figsize=(16, 9))\n",
    "ax = fig.add_subplot(1, 2, 1)\n",
    "ax.barh(np.arange(10) - 0.5, obs_countries[-10:])\n",
    "ax.set_title('Top 10 countries per occurences')\n",
    "ax.set_yticks(range(10))\n",
    "ax.set_ylim(0.5, 9.5)\n",
    "ax.set_yticklabels(countries[-10:])\n",
    "#refer metadata problems\n",
    "\n",
    "ax = fig.add_subplot(2, 2, 2)\n",
    "ax.set_title('Basis of record')\n",
    "ax.bar(np.arange(len(basis_name)), basis_cnt, color='g')\n",
    "basis_name = [x.replace('OBSERVATION', 'OBS').replace('_SPECIMEN', '') for x in basis_name]\n",
    "ax.set_xticks(0.5 + np.arange(len(basis_name)))\n",
    "ax.set_xticklabels(basis_name, size='x-small')\n",
    "\n",
    "ax = fig.add_subplot(2, 2, 4)\n",
    "other = len(leaves) - zero_occurrences - count_extinct\n",
    "pie_values = [zero_occurrences, count_extinct, other]\n",
    "labels = ['No occurence (%d)' % zero_occurrences,\n",
    "          'Extinct (%d)' % count_extinct, 'Other (%d)' % other]\n",
    "ax.pie(pie_values, labels=labels,\n",
    "       colors=['cyan', 'magenta', 'yellow'])\n",
    "ax.set_title('Status for each species')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#distribution of observations of horribilis per year\n",
    "#probably not put..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "horribilis = get_all_records('results', 'occurrence', 'search', taxonKey=6163845)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f676d035160>]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "years = defaultdict(int)\n",
    "for x in horribilis:\n",
    "    years[x.get('year', None)] += 1\n",
    "xs, ys = zip(*[(y, cnt) for y, cnt in years.items() if y is not None])\n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "ax.plot(xs, ys, '.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
